package com.reflection;

import java.lang.reflect.Array;

/**
 * 动态创建和访问数组
 *
 * java.lang.Array 类提供了动态创建和访问数组元素的各种静态方法。
 */
public class ArrayTester1 {

    // 例程 ArrayTester1 类的 main() 方法创建了一个长度为 10 的字符串数组，接着把索引位置为 5 的元素设为 “hello” ，然后再读取索引位置为 5 的元素的值
    public void test1() throws Exception {
        Class<?> classType = Class.forName("java.lang.String");
        // 创建一个长度为 10 的字符串数组
        Object array = Array.newInstance(classType, 10);
        // 把索引位置为 5 的元素设为 "hello"
        Array.set(array, 5, "hello");
        // 获得索引位置为 5 的元素的值
        String s = (String) Array.get(array, 5);
        System.out.println(s);
    }
    //例程 ArrayTester2 类的 main() 方法创建了一个 5 x 10 x 15 的整型数组，并把索引位置为 [3][5][10] 的元素的值为设 37 。
    public void test2() {
        int[] dims = new int[]{5, 10, 15};
        // 创建一个具有指定的组件类型和维度的新数组。
        Object array = Array.newInstance(Integer.TYPE, dims);
        Object arrayObj = Array.get(array, 3);
        arrayObj = Array.get(arrayObj, 5);
        Array.setInt(arrayObj, 10, 37);
        int arrayCast[][][] = (int[][][]) array;
        System.out.println(arrayCast[3][5][10]);
    }

    public static void main(String[] args) throws Exception {
        new ArrayTester1().test2();
    }
}
